文档

部署通义千问应用

更新时间:

本文以ModelScope社区的通义千问-7B-Chat模型为例,演示如何使用DataCache。通过DataCache提前拉取通义千问-7B-Chat模型数据,然后在创建通义千问的应用Pod时直接挂载模型数据,可以免去在Pod中拉取模型数据的等待时间,加速应用部署。

背景信息

通义千问-7B(Qwen-7B)是阿里云研发的通义千问大模型系列的70亿参数规模的模型。基于Transformer的大语言模型,在超大规模的预训练数据上进行训练得到了Qwen-7B。本文使用的通义千问-7B-Chat是在Qwen-7B的基础上,使用对齐机制打造了基于大语言模型的AI助手。更多信息,请参见Qwen-7B-Chat

前提条件

  • 集群中已部署DataCache CRD。具体操作,请参见部署DataCache CRD

  • 集群所属VPC已绑定公网NAT网关,并配置SNAT条目允许该VPC或下属交换机的资源可以访问公网。

    说明

    如果VPC没有绑定公网NAT网关,您需要在创建DataCache和部署应用时绑定EIP,以便可以拉取公网数据。

准备运行环境

  • 硬件要求

    需使用的GPU规格要求如下。ECI支持的GPU规格,请参见规格说明

    • CPU:无严格限制

    • 内存:>16 GiB

    • GPU:≥1

    • 显存:>16 GB(显存过低可能会出现OOM)

  • 软件环境

    通义千问-7B-Chat依赖的库和配置较多,ECI已经制作好了一个公共容器镜像,包含了一个基于Gradio的WebUI,您可以直接使用该镜像或者将其作为基础镜像进行二次开发。镜像地址为registry.cn-hangzhou.aliyuncs.com/eci_open/qwen-webui:1.0.0,大小约为15 GB。

操作步骤

创建DataCache

  1. 访问ModelScope,获取模型ID。

    本示例使用通义千问-7B-Chat模型的v1.1.4版本。在ModelScope找到目标模型后,在模型详情页面顶部可以复制模型ID。

  2. 编写DataCache的YAML配置文件,然后使用该YAML文件创建DataCache拉取通义千问-7B-Chat模型。

    kubectl create -f datacache-test.yaml

    datacache-test.yaml的内容示例如下:

    apiVersion: eci.aliyun.com/v1alpha1
    kind: DataCache
    metadata:
      name: qwen
    spec:
      bucket: test  
      path: /model/qwen/ 
      dataSource:
        type: URL 
        options:
          repoSource: ModelScope/Model              # 指定数据源为ModelScope的模型
          repoId: qwen/Qwen-7B-Chat                 # 指定模型ID
          revision: v1.1.4                          # 指定模型版本
      retentionDays: 1
      netConfig: 
        securityGroupId: sg-2ze63v3jtm8e6s******
        vSwitchId: vsw-2ze94pjtfuj9vay******       # 指定已配置SNAT的交换机
  3. 查询DataCache状态。

    kubectl get edc

    当数据下载完成,DataCache的状态为Available时,表示可以使用DataCache。示例如下:

    通义千问1.png

部署通义千问应用

  1. 编写应用的YAML配置文件,然后使用该YAML文件部署通义千问应用。

    kubectl create -f qwen.yaml

    qwen.yaml的内容示例如下,可以创建一个包含1个Pod副本的Deployment,Pod使用GPU规格,并挂载了通义千问模型。Pod内容器使用包含通义千问WebUI应用的镜像,容器启动后会运行python Qwen-7B/web_demo.py --server_port 8888启动WebUI。

    说明

    以下YAML示例中,系统会自动创建并为Pod绑定一个EIP。如果您的集群所属VPC已绑定公网NAT网关,可去掉该Annotation,在Pod创建成功后,您可以配置DNAT条目实现外部访问Pod。实际业务场景中,建议创建Service来统一提供Pod访问入口。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: qwen-web
      labels:
        app: qwen
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: qwen
      template:
        metadata:
          name: qwen
          labels:
            app: qwen
            alibabacloud.com/eci: "true" 
          annotations:
            k8s.aliyun.com/eci-use-specs: "ecs.gn7i-c8g1.2xlarge"    # 指定GPU规格
            k8s.aliyun.com/eci-data-cache-bucket: "test"             # 指定DataCache Bucket
            k8s.aliyun.com/eci-data-cache-provisionedIops: "35000"   # 设置ESSD AutoPL云盘预配置的读写IOPS
            k8s.aliyun.com/eci-data-cache-burstingEnabled: "true"    # 设置ESSD AutoPL云盘开启Brust,加速应用启动
            k8s.aliyun.com/eci-with-eip: "true"                      # 自动创建并绑定EIP,以便外部可以访问
        spec:
          containers:
          - name: qwen
            image: registry.cn-hangzhou.aliyuncs.com/eci_open/qwen-webui:1.0.0  # 使用制作好的通义千问镜像
            resources:
                limits:
                  nvidia.com/gpu: "1"           # 设置容器所需的GPU数
            command: ["/bin/sh"]
            args: ["-c","python Qwen-7B/web_demo.py --server_port 8888"]    # 启动WebUI
            volumeMounts:
            - name: "model-qwen"
              mountPath: "/data/model/"         # 模型数据在容器内的挂载路径
          volumes: 
          - name: "model-qwen"
            hostPath:             
              path: "/model/qwen/"    # 挂载模型数据
  2. 确认应用部署状态。

    kubectl get deployment qwen-web
    kubectl get Pod

    示例如下,可以看到通义千问应用已经部署成功。

    通义千问2.png

  3. 确认模型数据的挂载情况。

    kubectl exec -it <POD_NAME> -- bash
    ls /data/model

    示例如下,可以看到容器的/data/model目录下已挂载模型数据。

    通义千问3.png

  4. 查看Pod绑定的EIP地址。

    kubectl describe pod <pod_name>

    在返回的Pod详情的Annotations中可以获取Pod绑定的EIP地址。

    通义千问4.png

测试模型效果

  1. 在Pod所属安全组中添加入方向规则,开放8888端口。

  2. 打开浏览器,访问通义千问的Web页面。

    本文示例的通义千问应用已单独绑定了EIP,可以直接输入Pod的EIP地址和容器开放的端口进行访问,例如39.106.XX.XX:8888

  3. 输入文本,测试通义千问-7B-Chat的模型效果。

    示例如下:

    通义千问5.png

  • 本页导读 (1)
文档反馈